

// import {
//   VuexModule,
//   Module,
//   Action,
//   Mutation,
//   getModule
// } from 'vuex-module-decorators'   //  typescript   vuex

// import { getToken, setToken, removeToken } from '@/utils/cookies'

// import { login, getUserInfo } from '@/api/users'  // 这里是请求api

// import store from '@/store'

// export interface IUserState {
//   id_token: string
//   username: string
//   password: string
//   roles: string[],  
//   abc:string
// }

// // 参数一：module名称，开启命名空间后会以name为命名空间
// // 参数二：是否使用动态加载，简而言之只有在用到当前的module才会加载，详细可以看vuex官网。本篇博客必须选择true，
// //        这也是为什么index.ts一直不用修改的原因，如果设置为false会有很大的变动，如果您真的需要这么做，可以自己研究一下，
// //        或者私信我。
// // 参数三：是否开启命名空间，如果你的模块很多，强烈建议开启
// // 参数四：挂载的store目标  //也就是 store 入口函数

// @Module({ name: 'user' ,dynamic: true, namespaced: true,  store })   

// //定义一个类  class User{}
// //定义一个类 继承VuexModule  class User extends VuexModule{}
// //定义一个类 继承VuexModule 和 接口  class User extends VuexModule implements IUserState
// class User extends VuexModule implements IUserState {
//   public id_token = getToken() || ''
//   public username = ''
//   public password = ''
//   public roles: string[] = []
//   public abc ='666'

//   @Mutation
//   private SET_TOKEN(token: string) {
//     this.id_token = token   //通过 this.的方法获取 接口里面的值
//    // this.abc='123'
//   }

//   @Mutation
//   private SET_ROLES(roles: string[]) {
//     this.roles = roles
//   }
//     @Mutation
//   private SET_Test(data:any ) {
//        console.log(data)
//        this.abc=data
//   }

//   @Action
//   public ResetToken() {
//     removeToken()
//     this.SET_TOKEN('')   //调用muataion
//     location.reload()
//   }

//   @Action
//   public async Login(params: any) {
//     let { mobilePhone, password, router } = params
//     mobilePhone = mobilePhone.trim()
//     const { data } = await login({ mobilePhone, password })
//     console.log(`Bearer ${data.id_token}`)
//     setToken(`Bearer ${data.id_token}`)
//     this.SET_TOKEN(`Bearer ${data.id_token}`)
//     router.push('/')
//   }

//   @Action
//   public async GetUserInfo() {
//     if (this.id_token === '') {
//       throw Error('GetUserInfo: token is undefined!')
//     }
//     const { data } = await getUserInfo()
//     if (!data) {
//       throw Error('Verification failed, please Login again.')
//     }
//     const { authorities } = data
//     // roles must be a non-empty array
//     if (!authorities || authorities.length <= 0) {
//       throw Error('GetUserInfo: roles must be a non-null array!')
//     }
//     this.SET_ROLES(authorities)
//   }

//    @Action
//   public async Test(params: any) {
//      console.log(params,'test-action')

//      this.SET_Test(params)
//   }
// }

// console.log(getModule(User))   //  getModule(User).id_token  可以直接获取元素值

// export const UserModule = getModule(User)
